{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.datasets import mnist\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = mnist.load_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'tuple'>\n"
     ]
    }
   ],
   "source": [
    "print(type(data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n"
     ]
    }
   ],
   "source": [
    "print(len(data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'tuple'> <class 'tuple'>\n"
     ]
    }
   ],
   "source": [
    "print(type(data[0]), type(data[1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "source": [
    "print(type(data[0][0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 28, 28)\n",
      "(60000,)\n"
     ]
    }
   ],
   "source": [
    "# 不同的读入方式\n",
    "train_X, train_y = mnist.load_data()[0]\n",
    "test_X, test_y = mnist.load_data()[1]\n",
    "print(train_X.shape)\n",
    "print(train_y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 28, 28)\n",
      "(60000,)\n"
     ]
    }
   ],
   "source": [
    "# 这样比较方便\n",
    "(X_train, y_train), (X_test, y_test) = mnist.load_data()\n",
    "print(X_train.shape)\n",
    "print(y_train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   3  18  18  18 126 136\n",
      "  175  26 166 255 247 127   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0  30  36  94 154 170 253 253 253 253 253\n",
      "  225 172 253 242 195  64   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0  49 238 253 253 253 253 253 253 253 253 251\n",
      "   93  82  82  56  39   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0  18 219 253 253 253 253 253 198 182 247 241\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0  80 156 107 253 253 205  11   0  43 154\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0  14   1 154 253  90   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0 139 253 190   2   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0  11 190 253  70   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0  35 241 225 160 108   1\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0  81 240 253 253 119\n",
      "   25   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0  45 186 253 253\n",
      "  150  27   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  16  93 252\n",
      "  253 187   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 249\n",
      "  253 249  64   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0  46 130 183 253\n",
      "  253 207   2   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0  39 148 229 253 253 253\n",
      "  250 182   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0  24 114 221 253 253 253 253 201\n",
      "   78   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0  23  66 213 253 253 253 253 198  81   2\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0  18 171 219 253 253 253 253 195  80   9   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0  55 172 226 253 253 253 253 244 133  11   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0 136 253 253 253 212 135 132  16   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]\n",
      " [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0\n",
      "    0   0   0   0   0   0   0   0   0   0]]\n"
     ]
    }
   ],
   "source": [
    "print(X_train[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-0.5, 27.5, 27.5, -0.5)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(X_train[0], cmap='gray', interpolation='none')\n",
    "plt.title(\"{}: Class {}\".format(0, y_train[0]))\n",
    "plt.axis('off')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "m = 3\n",
    "n = 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[22284 32660 48907 15458 40136 54637 39104 15307 41395]\n"
     ]
    }
   ],
   "source": [
    "r = np.random.randint(0, X_train.shape[0], m*n)\n",
    "print(r)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 9 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in range(m*n):\n",
    "    plt.subplot(m, n, i+1)\n",
    "    plt.imshow(X_train[r[i]], cmap='gray', interpolation='none')\n",
    "    plt.title(\"{}: Class {}\".format(r[i], y_train[r[i]]))\n",
    "    plt.axis('off')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 28, 28, 1)\n"
     ]
    }
   ],
   "source": [
    "train_X = train_X.reshape(-1, 28, 28, 1)\n",
    "print(train_X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
